/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package ch.uzh.ifi.seal.ssqa.model;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Source</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getFilePath <em>File Path</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getProjectPath <em>Project Path</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getFunctionNames <em>Function Names</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getIncludeNames <em>Include Names</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getIncludes <em>Includes</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getLineCount <em>Line Count</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getClasses <em>Classes</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getAssociatedFile <em>Associated File</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#isHeaderFile <em>Header File</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getCyclomaticComplexity <em>Cyclomatic Complexity</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getFanOut <em>Fan Out</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getEReference0 <em>EReference0</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getEReference1 <em>EReference1</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.Source#getEReference2 <em>EReference2</em>}</li>
 * </ul>
 * </p>
 *
 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource()
 * @model
 * @generated
 */
public interface Source extends Component {
	/**
	 * Returns the value of the '<em><b>File Path</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>File Path</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>File Path</em>' attribute.
	 * @see #setFilePath(String)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_FilePath()
	 * @model
	 * @generated
	 */
	String getFilePath();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getFilePath <em>File Path</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>File Path</em>' attribute.
	 * @see #getFilePath()
	 * @generated
	 */
	void setFilePath(String value);

	/**
	 * Returns the value of the '<em><b>Project Path</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Project Path</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Project Path</em>' attribute.
	 * @see #setProjectPath(String)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_ProjectPath()
	 * @model id="true"
	 * @generated
	 */
	String getProjectPath();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getProjectPath <em>Project Path</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Project Path</em>' attribute.
	 * @see #getProjectPath()
	 * @generated
	 */
	void setProjectPath(String value);

	/**
	 * Returns the value of the '<em><b>Function Names</b></em>' attribute list.
	 * The list contents are of type {@link java.lang.String}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Function Names</em>' attribute list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Function Names</em>' attribute list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_FunctionNames()
	 * @model
	 * @generated
	 */
	EList<String> getFunctionNames();

	/**
	 * Returns the value of the '<em><b>Include Names</b></em>' attribute list.
	 * The list contents are of type {@link java.lang.String}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Include Names</em>' attribute list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Include Names</em>' attribute list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_IncludeNames()
	 * @model
	 * @generated
	 */
	EList<String> getIncludeNames();

	/**
	 * Returns the value of the '<em><b>Includes</b></em>' reference list.
	 * The list contents are of type {@link ch.uzh.ifi.seal.ssqa.model.Source}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Includes</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Includes</em>' reference list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_Includes()
	 * @model
	 * @generated
	 */
	EList<Source> getIncludes();

	/**
	 * Returns the value of the '<em><b>Line Count</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Line Count</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Line Count</em>' attribute.
	 * @see #setLineCount(int)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_LineCount()
	 * @model
	 * @generated
	 */
	int getLineCount();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getLineCount <em>Line Count</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Line Count</em>' attribute.
	 * @see #getLineCount()
	 * @generated
	 */
	void setLineCount(int value);

	/**
	 * Returns the value of the '<em><b>Classes</b></em>' reference list.
	 * The list contents are of type {@link ch.uzh.ifi.seal.ssqa.model.CClass}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Classes</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Classes</em>' reference list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_Classes()
	 * @model
	 * @generated
	 */
	EList<CClass> getClasses();

	/**
	 * Returns the value of the '<em><b>Associated File</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Associated File</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Associated File</em>' reference.
	 * @see #setAssociatedFile(Source)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_AssociatedFile()
	 * @model
	 * @generated
	 */
	Source getAssociatedFile();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getAssociatedFile <em>Associated File</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Associated File</em>' reference.
	 * @see #getAssociatedFile()
	 * @generated
	 */
	void setAssociatedFile(Source value);

	/**
	 * Returns the value of the '<em><b>Header File</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Header File</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Header File</em>' attribute.
	 * @see #setHeaderFile(boolean)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_HeaderFile()
	 * @model
	 * @generated
	 */
	boolean isHeaderFile();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#isHeaderFile <em>Header File</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Header File</em>' attribute.
	 * @see #isHeaderFile()
	 * @generated
	 */
	void setHeaderFile(boolean value);

	/**
	 * Returns the value of the '<em><b>Cyclomatic Complexity</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Cyclomatic Complexity</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Cyclomatic Complexity</em>' attribute.
	 * @see #setCyclomaticComplexity(int)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_CyclomaticComplexity()
	 * @model
	 * @generated
	 */
	int getCyclomaticComplexity();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getCyclomaticComplexity <em>Cyclomatic Complexity</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Cyclomatic Complexity</em>' attribute.
	 * @see #getCyclomaticComplexity()
	 * @generated
	 */
	void setCyclomaticComplexity(int value);

	/**
	 * Returns the value of the '<em><b>Fan Out</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Fan Out</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Fan Out</em>' attribute.
	 * @see #setFanOut(int)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_FanOut()
	 * @model
	 * @generated
	 */
	int getFanOut();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getFanOut <em>Fan Out</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Fan Out</em>' attribute.
	 * @see #getFanOut()
	 * @generated
	 */
	void setFanOut(int value);

	/**
	 * Returns the value of the '<em><b>EReference0</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>EReference0</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>EReference0</em>' reference.
	 * @see #setEReference0(FileIndicator)
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_EReference0()
	 * @model
	 * @generated
	 */
	FileIndicator getEReference0();

	/**
	 * Sets the value of the '{@link ch.uzh.ifi.seal.ssqa.model.Source#getEReference0 <em>EReference0</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>EReference0</em>' reference.
	 * @see #getEReference0()
	 * @generated
	 */
	void setEReference0(FileIndicator value);

	/**
	 * Returns the value of the '<em><b>EReference1</b></em>' reference list.
	 * The list contents are of type {@link ch.uzh.ifi.seal.ssqa.model.ClassIndicator}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>EReference1</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>EReference1</em>' reference list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_EReference1()
	 * @model
	 * @generated
	 */
	EList<ClassIndicator> getEReference1();

	/**
	 * Returns the value of the '<em><b>EReference2</b></em>' reference list.
	 * The list contents are of type {@link ch.uzh.ifi.seal.ssqa.model.FunctionIndicator}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>EReference2</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>EReference2</em>' reference list.
	 * @see ch.uzh.ifi.seal.ssqa.model.ModelPackage#getSource_EReference2()
	 * @model
	 * @generated
	 */
	EList<FunctionIndicator> getEReference2();

} // Source
